package br.ufrn.dimap.ase.squid.metrics.visitors;

import java.util.List;

import br.ufrn.dimap.ase.squid.core.models.squidmodel.Asset;
import br.ufrn.dimap.ase.squid.core.models.squidmodel.Mapping;
import br.ufrn.dimap.ase.squid.core.models.squidmodel.impl.CodePieceImpl;
import br.ufrn.dimap.ase.squid.metrics.views.tree.model.InfoNode;

public class AbstractVisitor {
	
	protected String getPath(Asset asset) {
		String[] path = asset.getPath().split("\\.");
		
		if(path.length > 0) {
			if(asset instanceof CodePieceImpl)
				return path[path.length-2];
			else 
				return path[path.length-1];
		}
		
		return "";
	}
	

	protected void tirarRepeticoesListas(List<InfoNode>... listas) {
		for(List<InfoNode> infos : listas) {
			if(infos.size() > 1) {
				for (int i = 0; i < infos.size() - 1; i++) {
					for (int j = i+1; j < infos.size(); j++) {
						if(infos.get(j).getInfo().equalsIgnoreCase(infos.get(i).getInfo())) {
							infos.remove(j);
							j--;
							continue;
						}
					}
				}
			}
		}
	}
	

	protected void tirarRepeticoesListasString(List<String>... listas) {
		for(List<String> infos : listas) {
			if(infos.size() > 1) {
				for (int i = 0; i < infos.size() - 1; i++) {
					for (int j = i+1; j < infos.size(); j++) {
						if(infos.get(j).equalsIgnoreCase(infos.get(i))) {
							infos.remove(j);
							j--;
							continue;
						}
					}
				}
			}
		}
	}
	

	protected void tirarRepeticoesListasMapping(List<Mapping>... listas) {
		for(List<Mapping> maps : listas) {
			if(maps.size() > 1) {
				for (int i = 0; i < maps.size() - 1; i++) {
					for (int j = i+1; j < maps.size(); j++) {
						if(maps.get(j).getName().equalsIgnoreCase(maps.get(i).getName())) {
							maps.remove(j);
							j--;
							continue;
						}
					}
				}
			}
		}
	}
	
	protected String getPacote(String pacote) {
		String[] partes = pacote.split("/");
		
		pacote = "";
		for(int i = 0; i < partes.length-1; i++) {
			if(i != 0) pacote += ".";
			
			pacote += partes[i];
		}
		
		return pacote;
	}

}
